package com.soaring.message.util;

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;

import java.util.HashMap;
import java.util.Map;

/**
 * 利用阿里云发送短信的工具类
 * 参考文档：https://help.aliyun.com/document_detail/55284.html
 */
public class AliyunMessageUtil {

    //短信API产品名称（短信产品名固定，无需修改）
    private static final String product = "Dysmsapi";
    //短信API产品域名（接口地址固定，无需修改）
    private static final String domain = "dysmsapi.aliyuncs.com";
    //此处需要替换成开发者自己的AK(在阿里云访问控制台寻找)
    private static final String accessKeyId = "LTAIAukGYdVVelgq";
    private static final String accessKeySecret = "iZ931FON1nTRGKaWUKzBesTNksz2E1";

    public static SendSmsResponse sendSms(Map<String, String> paramMap) throws com.aliyuncs.exceptions.ClientException{

            //可自助调整超时时间
            System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
            System.setProperty("sun.net.client.defaultReadTimeout", "10000");
            //初始化acsClient,暂不支持region化
            IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);

            DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
            IAcsClient acsClient = new DefaultAcsClient(profile);
            //组装请求对象-具体描述见控制台-文档部分内容
            SendSmsRequest request = new SendSmsRequest();
            //使用post提交
            request.setMethod(MethodType.POST);
            //必填:待发送手机,支持以逗号分隔的形式进行批量调用，批量上限为1000个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式.
            request.setPhoneNumbers(paramMap.get("phoneNumber"));
            //必填:短信签名-可在短信控制台中找到
            request.setSignName(paramMap.get("msgSign"));
            //必填:短信模板-可在短信控制台中找到
            request.setTemplateCode(paramMap.get("templateCode"));
            //可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为$[code]"时,此处的值为
            request.setTemplateParam(paramMap.get("jsonContent"));
            //选填-上行短信扩展码(无特殊需求用户请忽略此字段)
            //request.setSmsUpExtendCode(paramMap.get("extendCode"));
            //可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
            //request.setOutId(paramMap.get("outId"));
            SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
            if (sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK")) {
                return sendSmsResponse;
            } else {
                return null;
            }
       }

       public  static void  main(String[] args){

            Map<String ,String >  param=new HashMap<String ,String >() ;

            param.put("phoneNumber","15650799296") ;
            param.put("msgSign","hello word") ;
            param.put("templateCode","SMS_1000000") ; //对应国内的消息模版ID，如果对应港澳台则需要改成港澳台的消息模版ID
            param.put("jsonContent","{\"name\":\"Tom\", \"code\":\"123\"}") ; //对应国内的消息模版ID，如果对应港澳台则需要改成港澳台的消息模版ID

           try {
                sendSms(param);
            }catch (Exception e){
                e.printStackTrace();
            }


    }
}
